package com.atguigu.observer.improve;

import java.util.ArrayList;
import java.util.List;

/**
 * 类是核心
 * 1.包含最新的天气情况信息
 * 2.包含观察者集合，使用哪个ArrayList管理
 * 3.当数据有更新时，就主动的调用 notifyObservers，通知所有的（接入方）就看到最新的信息
 * @author guijie
 *
 */
public class WeatherData implements Subject {
	private float temperature;//温度
	private float pressure;//气压
	private float humidity;//湿度
	//观察者集合
	private List<Observer> observers = new ArrayList<Observer>();

	public float getTemperature() {
		return temperature;
	}

	public float getPressure() {
		return pressure;
	}

	public float getHumidity() {
		return humidity;
	}
	
	public void dataChange() {
		notifyObservers();
	}

	//当数据有更新时，就调用 setData 
	public void setData(float temperature, float pressure, float humidity) {
		this.temperature = temperature;
		this.pressure = pressure;
		this.humidity = humidity;
		//调用 dataChange ，将最新的信息 推送给 接入方
		dataChange();
	}

	//注册一个观察者
	@Override
	public void registerObserver(Observer o) {
		observers.add(o);
	}

	//移除一个观察者
	@Override
	public void removeObserver(Observer o) {
		observers.remove(o);
	}

	//遍历通知所有的观察者，并通知
	@Override
	public void notifyObservers() {
		for (Observer observer : observers) {
			observer.update(temperature, pressure, humidity);
		}
	}
	
}
